package com.cctc.rds.raft.core;

import lombok.*;

import java.util.Random;

/**
 * Raft 集群 [单节点] 配置信息
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RaftClusterConfig {
    /**
     * 当前节点 ID
     */
    private int nodeId = System.getenv("raft.node.id") != null ?
            Integer.parseInt(System.getenv("raft.node.id")) : new Random().nextInt(Integer.MAX_VALUE);
    /**
     * 心跳周期（毫秒）
     * - 必须小于选举周期 / 2（即一次选举的超时时间）的最小值。
     */
    private long heartBeatMs = System.getenv("raft.heartBeatMs") != null ?
            Long.parseLong(System.getenv("raft.heartBeatMs")) : 150 / 2;
    /**
     * 选举周期（毫秒）
     */
    private long electionMs = System.getenv("raft.electionMs") != null ?
            Long.parseLong(System.getenv("raft.electionMs")) : new Random().nextInt(50) + 150;
}
